package com.hhq;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame; 

public class MyFrame extends JFrame {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    MyPanel panel = new MyPanel(); // 实例自定义控件对象
    Container root;
    public static final MyFrame myframe = new MyFrame("图片查看器");

    public static MyFrame getInstance() {
        return myframe;
    }

    public MyFrame(String title) {
        super(title);

        root = getContentPane();
        // 设置布局为BorderLayout，中间显示图片，下方显示控制按钮
        root.setLayout(new BorderLayout());

        Box box = Box.createHorizontalBox(); // 创建一个Box水平布局用于存放两个按钮
        JButton next = new JButton("下一张");
        JButton back = new JButton("上一张");
        JButton open = new JButton("打开文件夹");
        box.add(Box.createHorizontalGlue()); // 按钮左边自动间距
        box.add(back); // 添加按钮
        box.add(Box.createHorizontalStrut(20)); // 两个按钮中间相距20像素
        box.add(next); // 添加按钮
        box.add(Box.createHorizontalGlue()); // 按钮右边自动间距
        box.add(open); // 添加按钮
        box.add(Box.createHorizontalGlue()); // 按钮右边自动间距

        root.add(panel, BorderLayout.CENTER); // 图片显示在中间
        root.add(box, BorderLayout.PAGE_END); // 按钮显示在下方

        /**
         * 下一张按钮监听事件
         */
        next.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                NextImage();
            }
        }); 

        /**
         * 上一张按钮监听事件
         */
        back.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                BackImage();
            }

        });

        open.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fc = new JFileChooser();
                fc.setPreferredSize(new Dimension(1000,700)); 
                fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int flag = fc.showOpenDialog(null);
                if (flag == JFileChooser.APPROVE_OPTION) {
                    String a = fc.getSelectedFile().getAbsolutePath();
                    panel.addFile(a); // 初始化文件
                    try {
                        panel.ImgList = panel.ImageFromFile(panel.loadPath); // 获得图片列表
                        panel.index=0;
                        panel.repaint();
                    } catch (IOException es) {
                        es.printStackTrace();
                    }
                }
            }
        });

    }

    /**
     * 下一张
     */
    public void NextImage() {
        int index = panel.index; // 获得当前图片索引
        int size = panel.loadPath.length - 1; // 获得所有图片的数量，用于下面的算法。由于索引从0开始，所以这里-1
        if (index >= 0 && index < size) // 判断是否超出索引
        {
            panel.index += 1; // 索引+1，显示后面一张
        } else if (index == size) // 如果当前显示最后一张，则从第一张开始播放
        {
            panel.index = 0;
        }
        panel.repaint(); // 重新绘制图片
    }

    /**
     * 上一张
     */
    public void BackImage() {
        int index = panel.index;
        int size = panel.loadPath.length - 1;
        if (index <= size && index > 0) {
            panel.index -= 1; // 索引-1，显示前面一张
        } else if (index == 0) // 如果当前显示第一张，则显示最后一张图
        {
            panel.index = size;
        }
        panel.repaint();
    }
}